package com.mach.platform.repository;

import com.mach.platform.domain.iot.IotConfigDevice;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 * @Description:
 * @Package: com.mach.platform.repository
 * @time 2018/7/20 0020 11:04
 */
@Repository
public interface ConfigDeviceRepo extends BaseRepository<IotConfigDevice> {

	/**
	 * 根据uuid查找组态数据来
	 * @param uuid
	 * @return
	 * @Cacheable   @Cacheable可以标记在一个方法上，也可以标记在一个类上,当标记在一个方法上时表示该方法是支持缓存的,value属性指定Cache名称
	 * key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式,当我们没有指定该属性时，Spring将使用默认策略生成key
	 */
	@Cacheable(value = "devConfig", key = "#a0")
	List<IotConfigDevice> findAllByUuid (String uuid);

	/**
	 * 从实时表 查找数据
	 * @param did
	 * @param property
	 * @return
	 * IFNULL(expr1,expr2)，如果expr1不是NULL，IFNULL()返回expr1，否则它返回expr2
	 * 有nativeQuery = true时，是可以执行原生sql语句，所谓原生sql，也就是说这段sql拷贝到数据库中，然后把参数值给一下就能运行了
	 */
	@Query(value = " select data_type as name, ifnull(dvalue, 'N/A') as value, unit from iot_dev_cur_data_win where dev_id=:did and data_type=:property", nativeQuery = true)
	Map loadRealTimeData (@Param("did") Long did, @Param("property") String property);

}
